package org.aplikator.server.descriptor;

import org.aplikator.client.shared.descriptor.QueryDescriptorDTO;
import org.aplikator.client.shared.descriptor.QueryParameter;
import org.aplikator.server.Context;
import org.aplikator.server.query.QueryExpression;
import org.aplikator.server.util.Configurator;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class QueryDescriptor extends ServerDescriptorBase{
    private List<QueryParameter> queryParameters = new ArrayList<QueryParameter>();
    private QueryExpression queryExpression;

    public QueryDescriptor(String id, String label) {
        super(id);
        setLocalizationKey(label);
    }

    public QueryDescriptor setQueryExpression(QueryExpression queryExpression) {
        this.queryExpression = queryExpression;
        return this;
    }

    public QueryDescriptor addQueryParameter(QueryParameter param){
        queryParameters.add(param);
        return this;
    }

    List<QueryParameter> getQueryParameters(){
        return queryParameters;
    }


    public QueryExpression getQueryExpression(List<QueryParameter> queryParameters, Context ctx){
        if (queryExpression!= null){
            queryExpression.bindParameters(queryParameters);
        }
        return queryExpression;
    }

    public QueryDescriptorDTO getQueryDescriptorDTO(Context ctx) {
        QueryDescriptorDTO queryDescriptorDTO = new QueryDescriptorDTO(this.getId(), this.getLocalizedName(ctx));
        Locale locale = ctx != null ? ctx.getUserLocale() : Locale.getDefault();
        for (QueryParameter qp: getQueryParameters()){
            queryDescriptorDTO.addQueryParameter(new QueryParameter(Configurator.get().getLocalizedString(qp.getName(), locale)));
        }
        return queryDescriptorDTO;
    }

}
